package com.juanfrivaldes.cio2005.web;

import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class SustituirFicheroAction extends AltaPonenciaAction {

	private static Log log = LogFactory
			.getLog(AccesoSustituirFicheroAction.class);

	protected String resumenesDir = "/cio2005-resumenes/";

	protected String finalesDir = "/cio2005-ponencias/";
	
	private final static String showResumenesPath="/WEB-INF/files/resumenes/";
	
	private final static String showFinalesPath="/WEB-INF/files/ponencias/";

	protected ActionForward protectedExecute(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		SustituirFicheroForm susForm = (SustituirFicheroForm) form;

		log.trace("peticion de sustituir ponencia " + susForm.getPonencia()
				+ " - " + susForm.getTipo());

		try {
			Random random = new Random();
			// lo primero es copiar la antigua ponencia al directorio bak como
			// copia de seguridad
			String baseDir = "";
			if (susForm.getTipo().equals("final")) {
				baseDir = finalesDir;
			} else if (susForm.getTipo().equals("resumen")) {
				baseDir = resumenesDir;
			} else {
				log.trace("error el tipo no es final ni resumen");
				mapping.findForward("failure");
			}
			
			File f = new File(baseDir + "/" + susForm.getPonencia() + ".pdf");
			String nombreBak=baseDir + "bak/" + susForm.getPonencia()
			+ "_" + random.nextInt(10000) + ".pdf";
			if (!f.renameTo(new File(nombreBak))) {
				log.trace("error al renombrar el fichero y pasarlo a bak");
				return mapping.findForward("failure");
			}
			log.trace("Renombrado el antiguo fichero en "+nombreBak);
			
			
			String cachePath="";
			if (susForm.getTipo().equals("final")) {
				cachePath=showFinalesPath;
				
			} else if (susForm.getTipo().equals("resumen")) {
				cachePath = showResumenesPath;
			} else {
				//no puede pasar
				log.trace("error el tipo no es final ni resumen");
				return mapping.findForward("failure");
			}
			
			//borramos el fichero en el directorio propio por si acaso
			File cache=new File(getServlet().getServletContext().getRealPath(cachePath+susForm.getPonencia()+".pdf"));
			if(cache.exists()){
				cache.delete();
			}

			//por ultimo se sube el nuevo fichero
			writeFile(susForm.getArchivo(), baseDir+susForm.getPonencia()+".pdf");
			log.trace("Escrito Fichero "+baseDir+susForm.getPonencia()+".pdf");
			
			
			
		} catch (Exception e) {
			log.trace("Error en el proceso de sustitución de archivo: "+e.getMessage());
			return mapping.findForward("failure");
		}

		return mapping.findForward("success");
	}

}
